package com.xwaf.platform.system.api.service.gateway;

import com.baomidou.mybatisplus.plugins.Page;
import com.xwaf.platform.common.api.entity.TokenInfo;
import com.xwaf.platform.common.api.service.IELService;
import com.xwaf.platform.system.api.entity.auth.User;
import com.xwaf.platform.system.api.entity.gateway.Token;
import com.xwaf.platform.system.api.request.auth.TokenVerifyRequest;

public interface TokenService extends IELService<Token> {

	/**
	 * 
	 * <p>
	 * 分页查询
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月30日 上午8:56:50 <br>
	 * @see 无<br>
	 * @param page
	 *            分页参数
	 * @param token
	 *            条件参数
	 * @return 当前页数据
	 * @demo <br>
	 */
	Page<Token> selPageList(Page<Token> page, Token token);

	/**
	 * 
	 * <p>
	 * 验证客户端用户token是否有效
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月30日 上午8:57:09 <br>
	 * @see 无<br>
	 * @param tokenVerifyReq
	 * @return
	 * @throws Exception
	 * @demo <br>
	 */
	TokenInfo verifyToken(TokenVerifyRequest tokenVerifyReq) throws Exception;

	/**
	 * 
	 * <p>
	 * 清除用户token强制需要登陆
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月30日 上午8:57:16 <br>
	 * @see 无<br>
	 * @param deviceType
	 * @param uid
	 *            用户ID
	 * @demo <br>
	 */
	void clearToken(String deviceType, String uid);

	/**
	 * 
	 * <p>
	 * 申请token
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月30日 上午8:57:22 <br>
	 * @see 无<br>
	 * @param user
	 * @param deviceType
	 * @param ip
	 *            客户端IP
	 * @return
	 * @throws Exception
	 * @demo <br>
	 */
	TokenInfo applyToken(User user, String deviceType, String ip) throws Exception;

	/**
	 * 
	 * <p>
	 * 获取最后一次登陆的token信息
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月30日 上午8:57:29 <br>
	 * @see 无<br>
	 * @param deviceType
	 * @param uid
	 * @return
	 * @throws Exception
	 * @demo <br>
	 */
	TokenInfo getLastToken(String deviceType, Long uid) throws Exception;

	/**
	 * 
	 * <p>
	 * 验证签名异常
	 * <p>
	 * 
	 * @author 李聪 <br>
	 * @email xwaf_love@yeah.net <br>
	 * @since JDK 1.8<br>
	 * @date 2019年12月30日 上午8:57:36 <br>
	 * @see 无<br>
	 *      Copyright (c) 2019, xwaf_love@yeah.net All Rights Reserved.<br>
	 */
	public static class SignVerifyException extends RuntimeException {

		private static final long serialVersionUID = 1L;

		public SignVerifyException() {
			super();
		}

		public SignVerifyException(String message) {
			super(message);
		}

		public SignVerifyException(Throwable cause) {
			super(cause);
		}
	}
}
